// src/stores/user.js（Vue 3 + Pinia）
import { defineStore } from 'pinia';

export const useUserStore = defineStore('user', {
  // 存储的状态（核心+补充，共5个关键字段）
  state: () => ({
    token: localStorage.getItem('token') || '', // 用户令牌（接口请求必备）
    isLogin: !!localStorage.getItem('token'), // 是否登录（true/false，从localStorage取，刷新不丢）
    isVip: false, // 是否会员（true/false）
    vipExpireTime: '', // 会员到期时间（如"2025-12-31"，判断会员是否过期）
    userInfo: { // 用户基础信息（避免重复请求接口）
      phone: localStorage.getItem('phone') || '', // 手机号（登录后存储）
      nickname: localStorage.getItem('nickname') || '普通用户' // 昵称
    }
  }),

  // 计算属性（简化状态判断，直接用）
  getters: {
    // 判断会员是否有效（未过期才是真会员）
    isVipValid: (state) => {
      if (!state.isVip) return false;
      // 对比当前时间和到期时间（如到期时间在今天之后，说明有效）
      return new Date(state.vipExpireTime) > new Date();
    }
  },

  // 方法（修改状态的逻辑，统一管理）
  actions: {
    // 登录成功：保存状态到Pinia + localStorage（刷新不丢失）
    loginSuccess(userData) {
      this.token = userData.token;
      this.isLogin = true;
      this.isVip = userData.isVip;
      this.vipExpireTime = userData.vipExpireTime;
      this.userInfo = {
        phone: userData.phone,
        nickname: userData.nickname || `用户${userData.phone.slice(-4)}`
      };

      // 同步到localStorage（关键！避免刷新页面状态丢失）
      localStorage.setItem('token', this.token);
      localStorage.setItem('phone', this.userInfo.phone);
      localStorage.setItem('nickname', this.userInfo.nickname);
    },

    // 退出登录：清空所有状态
    logout() {
      this.token = '';
      this.isLogin = false;
      this.isVip = false;
      this.vipExpireTime = '';
      this.userInfo = {};

      // 清空localStorage
      localStorage.clear();
    },

    // 刷新会员状态（如会员续费后，更新状态）
    updateVipStatus(vipData) {
      this.isVip = vipData.isVip;
      this.vipExpireTime = vipData.vipExpireTime;
    }
  }
});